Dalam C++, mengelola pertumbuhan container adalah tarian arsitektur antara Ukuran (elemen saat ini) dan Kapasitas (memori yang dialokasikan). Untuk container kontinu seperti vector dan string, mencapai kapasitas memicu relokasi: sistem menemukan blok memori yang lebih besar, memindahkan semua elemen, dan menghancurkan blok lama. Ini adalah operasi mahal dengan kompleksitas $O(n)$ yang menyebabkan invalidasi iterator—penunjuk Anda ke elemen lama menjadi "menggantung" dan berbahaya.
1. Strategi Perluasan
Untuk menghindari relokasi yang sering, vector implementasi mengalokasikan ruang "buffer". Perintah c.reserve(n) secara eksplisit menetapkan kapasitas minimum tanpa menambah elemen, sementara c.shrink_to_fit() adalah permintaan tidak mengikat untuk mengembalikan memori yang berlebihan ke sistem operasi.
2. Perbedaan Resize vs. Reserve
Sementara reserve hanya memengaruhi buffer, resize(n) secara aktif mengubah logika container. Mengurangi ukuran melalui resize menghancurkan elemen, sementara memperbesar menambahkan nilai yang diinisialisasi secara default.
resize mengurangi ukuran container, iterator ke elemen yang dihapus menjadi tidak valid. Jika perluasan menyebabkan relokasi, SEMUA semua iterator menjadi tidak valid.